V@#  VW2 productidProductsproductid@1A picture representing the food category.8Picture8DescriptionK8Number automatically assigned to a new category.8Category ID5 employeeidEmployeesemployeeid4 reportstoEmployeesemployeeid0Employee's supervisor.8Reports ToE8General information about employee's background. 8Notes)Picture of employee. 8Photo=,Internal telephone extension number.8ExtensionJ8Phone number includes country code or area code.8Home Phone8Country8Postal Code(State or province.8Region 8City1"Street or post-office box.8Address8Hire Date_ birthdate0.AND.discount<12 "You must enter a value between 0 and 1."8Discount8Last Name8Country8%Categories table foreign key.8Category ID7$Suppliers table foreign key.8Supplier ID@/Supplier's home page on World Wide Web.8Home Page;"Title used in salutations.8Title Of CourtesyI6Number automatically assigned to new employee.8Employee IDC8Phone number includes country code or area code. 8Fax(State or province.8Region1"Street or post-office box.8Addressd:Unique five-character code based on customer name. 6XXXXX 7!A8Customer ID8Postal Code 8City8Contact Namemsuppliers.dbf__ri_delete_suppliers()__ri_update_suppliers()supplieridE8Phone number includes country code or area code. 8Phone8Company Nameishippers.dbfshipperid__ri_delete_shippers()__ri_update_shippers()5 supplieridSupplierssupplierid6 categoryidCategoriescategoryid3Name of food category.8Category Name'8Company Name& "Please enter a company name.5 customeridCustomerscustomerid8Contact Name8Contact Title 8City8Postal Code8CountryE8Phone number includes country code or area code. 8PhoneC8Phone number includes country code or area code. 8Fax!  08Freight 7$8Product Name& "Please enter a product name.J#Customer table foreign key.8Customer 6XXXXX 7!A8Order Date 7D8Required Date 7D8Shipped Date 7D8Ship City8Ship Postal Code8Ship CountryI6Number automatically assigned to new supplier.8Supplier IDU  1 quantity>0* "Quantity must be greater than 0."8Quantityc  0 unitprice=>0+ "You must enter a positive number."8Unit Price 7$5#Products table foreign key.8Product ID1!Orders table foreign key.8Order ID2orderdetails.dbfprimarykeyZ unitprice=>0+ "You must enter a positive number."8Unit Price 7$E8Phone number includes country code or area code. 8Phonea  0 unitsinstock=>0+ "You must enter a positive number."8Units in StockX unitsonorder=>0+ "You must enter a positive number."8Units On Orderaorders.dbf__ri_delete_orders()__ri_update_orders()orderid__ri_insert_ordeG5Number automatically assigned to new product.8Product IDG5Number automatically assigned to new shipper.8Shipper IDG.(e.g., 24-count case, 1-liter bottle).8Quantity Per Unit+Minimum units to maintain in stock.  0 reorderlevel=>0+ "You must enter a positive number."8Reorder LevelS4Yes (.T.) means item is no longer available.  .F.8Discontinuedpcategories.dbf __ri_delete_categories() __ri_update_categories()categoryidmcustomers.dbfcustomerid__ri_delete_customers()__ri_update_customers()memployees.dbf__ri_delete_employees()__ri_update_employees()employeeid8Contact Title*&-#productid MIiproducts.dbf__ri_delete_products()__ri_update_products()productid)&-#subtotal MY5&-#OrderDetails.orderid MIH.0$(,PQR / %d '+OrderDetails*SELECT OrderDetails.OrderID, Sum( (OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100) *100) AS Subtotal FROM OrderDetails GROUP BY OrderDetails.OrderID) .&-#extendedprice MY<&-#OrderDetails.discountMN(20,5)6&-#OrderDetails.quantity MI7&-#OrderDetails.unitprice MY9&-#Products.productname MC(40)7&-#OrderDetails.productid MI5&-#OrderDetails.orderid MI.0$(,PQR / %d '+OrderDetails,ProductsS*SELECT OrderDetails.OrderID, OrderDetails.ProductID, Products.ProductName, OrderDetails.UnitPrice, OrderDetails.Quantity, OrderDetails.Discount, ((OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100)*100) AS ExtendedPrice FROM Products INNER JOIN OrderDetails ON Products.ProductID = OrderDetails.ProductID) 0&-#relationship MC(9):&-#Customers.contactname MC(30):&-#Customers.companyname MC(40)3&-#Customers.city MC(15)0.0$(,PQR / %d '+Customers*SELECT City, CompanyName, ContactName, 'Customers' AS Relationship FROM Customers UNION SELECT City, CompanyName, ContactName, 'Suppliers' FROM Suppliers) .&-#categorysales MYH&-+#Product_Sales_For_1997.categoryname MC(15)-&-#productsales MY0&-#productname MC(40)3&-#Products.unitprice MY=&- #tenmostexpensiveproducts MC(40).0$(,PQR / %d '+Products*SELECT TOP 10 Products.ProductName AS TenMostExpensiveProducts, Products.UnitPrice FROM Products ORDER BY Products.UnitPrice DESC) -&-#productsales MY9&-#Products.productname MC(40)<&-#Categories.categoryname MC(15)6&-#Categories.categoryid MI.0$(,PQR / %d '+Categories,Products4*SELECT Categories.CategoryID, Categories.CategoryName, Products.ProductName, Sum(Order_Details_Extended.ExtendedPrice) AS ProductSales FROM Categories INNER JOIN (Products INNER JOIN (Orders INNER JOIN Order_Details_Extended ON Orders.OrderID = Order_Details_Extended.OrderID) ON Products.ProductID = Order_Details_Extended.ProductID) ON Categories.CategoryID = Products.CategoryID WHERE BETWEEN(Orders.OrderDate, {^1997/01/01},{^1997/12/31}) GROUP BY Categories.CategoryID, Categories.CategoryName, Products.ProductName ORDER BY Products.ProductName) 3&-#Orders.shippeddate MD:&-#Customers.companyname MC(40)/&-#Orders.orderid MI+&-#saleamount MY.0$(,PQR / %d '+Orders,Customersm*SELECT Order_Subtotals.Subtotal AS SaleAmount, Orders.OrderID, Customers.CompanyName, Orders.ShippedDate FROM Customers INNER JOIN (Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID) ON Customers.CustomerID = Orders.CustomerID WHERE (Order_Subtotals.Subtotal >2500) AND BETWEEN(Orders.ShippedDate, {^1997/01/01},{^1997/12/31})) 6&-#Customers.country MC(15)3&-#Customers.city MC(15):&-#Customers.companyname MC(40)8&-#Customers.customerid MC(5)}.0$(,PQR / %d '+Customers*SELECT DISTINCT Customers.CustomerID, Customers.CompanyName, Customers.City, Customers.Country FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID WHERE BETWEEN(Orders.OrderDate, {^1997/01/01},{^1997/12/31})) 6&-#Products.discontinued ML6&-#Products.unitsinstock MI=&- #Products.quantityperunit MC(20)9&-#Products.productname MC(40)<&-#Categories.categoryname MC(15).0$(,PQR / %d '+Categories,Products0*SELECT Categories.CategoryName, Products.ProductName, Products.QuantityPerUnit, Products.UnitsInStock, Products.Discontinued FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID WHERE Products.Discontinued = .F. ORDER BY Categories.CategoryName, Products.ProductName) 3&-#Products.unitprice MY9&-#Products.productname MC(40).0$(,PQR / %d '+Products*SELECT Products.ProductName, Products.UnitPrice FROM Products WHERE Products.UnitPrice>(SELECT AVG(UnitPrice) From Products)) 6&-#Customers.country MC(15)9&-#Customers.postalcode MC(10)5&-#Customers.region MC(15)3&-#Customers.city MC(15)6&-#Customers.address MC(60):&-#Customers.companyname MC(40)7&-#Orders.shipcountry MC(15):&-#Orders.shippostalcode MC(10)6&-#Orders.shipregion MC(15)4&-#Orders.shipcity MC(15)7&-#Orders.shipaddress MC(60)4&-#Orders.shipname MC(40)/&-#Orders.freight MY/&-#Orders.shipvia MI3&-#Orders.shippeddate MD4&-#Orders.requireddate MD1&-#Orders.orderdate MD2&-#Orders.employeeid MI5&-#Orders.customerid MC(5)/&-#Orders.orderid MIk.0$(,PQR / %d '+Orders,Customers*SELECT Orders.OrderID, Orders.CustomerID, Orders.EmployeeID, Orders.OrderDate, Orders.RequiredDate, Orders.ShippedDate, Orders.ShipVia, Orders.Freight, Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShipRegion, Orders.ShipPostalCode, Orders.ShipCountry, Customers.CompanyName, Customers.Address, Customers.City, Customers.Region, Customers.PostalCode, Customers.Country FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) ).0$(,PQR / %d '*SELECT Product_List.ProductID, Product_List.ProductName FROM Products AS Product_List WHERE (((Product_List.Discontinued)=.F.)) ORDER BY Product_List.ProductName ) .0$(,PQR / %d '/+northwind!Products,northwind!Categories*SELECT Products.*, Categories.categoryname FROM northwind!Categories INNER JOIN northwind!Products ON Categories.categoryid = Products.categoryid WHERE Products.discontinued = .F. ORDER BY Products.productname) =&-$#northwind!Products.productid MIC&-&#northwind!Products.productname MC(40)>&-%#northwind!Products.supplierid MI+&-#categoryid MIG&-*#northwind!Products.quantityperunit MC(20)=&-$#northwind!Products.unitprice MY@&-'#northwind!Products.unitsinstock MI@&-'#northwind!Products.unitsonorder MI@&-'#northwind!Products.reorderlevel MI@&-'#northwind!Products.discontinued MLF&-)#northwind!Categories.categoryname MC(15)u.0$(,PQR / %d '*SELECT Categories.CategoryName, Products.ProductName, Sum( (OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100) *100) AS ProductSales FROM (Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID) INNER JOIN (Orders INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID) ON Products.ProductID = OrderDetails.ProductID WHERE BETWEEN(Orders.ShippedDate, {^1997/01/01},{^1997/12/31}) GROUP BY Categories.CategoryName, Products.ProductName) 1&-#categoryname MC(15)P.0$(,PQR / %d '+Product_Sales_For_1997*SELECT Product_Sales_For_1997.CategoryName, Sum(Product_Sales_For_1997.ProductSales) AS CategorySales FROM Product_Sales_For_1997 GROUP BY Product_Sales_For_1997.CategoryName) 8Region ID8Region Description. regionidRegionregionidbregion.dbfregionid__ri_delete_region()__ri_update_region()(&- #year MN(5)&&- #total MYsterritories.dbfterritoryi!__ri_delete_territories()!__ri_update_territories() customerdemographics.dbfcusttypeid*__ri_delete_customerdemographics()*__ri_update_customerdemographics()5 employeeidEmployeesemployeeid7 territoryiTerritoriesterritoryi8Territory ID8Employee ID&&- #total MY+&-#quarter MN(9)(&- #year MN(5).0$(,PQR / %d 'H*SELECT YEAR(Orders.ShippedDate) as Year, INT(MONTH(Orders.ShippedDate)/4)+1 as Quarter, SUM(Order_Subtotals.Subtotal) as Total FROM Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID WHERE NOT EMPTY(NVL(Orders.ShippedDate,"")) GROUP BY Year, Quarter ORDER BY Year, Quarter) w.0$(,PQR / %d '*SELECT YEAR(Orders.ShippedDate) as Year, SUM(Order_Subtotals.Subtotal) as Total FROM Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID WHERE NOT EMPTY(NVL(Orders.ShippedDate,"")) GROUP BY Year ORDER BY Year) (&-#freight MY.&-#extendedprice MY/&-#discountMN(20,5))&-#quantity MI*&-#unitprice MY0&-#productname MC(40)*&-#productid MI0&-#shippername MC(40),&-#shippeddate MD-&-#requireddate MD*&-#orderdate MD(&-#orderid MI0&-#salesperson MC(31),&-#country MC(15)/&-#postalcode MC(10)+&-#region MC(15))&- #city MC(15),&-#address MC(60)1&-#customername MC(40).&-#customerid MC(5)0&-#shipcountry MC(15)3&-#shippostalcode MC(10).0$(,PQR / %d 'H*SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShipRegion, Orders.ShipPostalCode, Orders.ShipCountry, Orders.CustomerID, Customers.CompanyName AS CustomerName, Customers.Address, Customers.City, Customers.Region, Customers.PostalCode, Customers.Country, (ALLTRIM(FirstName) + ' ' + ALLTRIM(LastName)) AS Salesperson, Orders.OrderID, Orders.OrderDate, Orders.RequiredDate, Orders.ShippedDate, Shippers.CompanyName As ShipperName, OrderDetails.ProductID, Products.ProductName, OrderDetails.UnitPrice, OrderDetails.Quantity, OrderDetails.Discount, (OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100) *100 AS ExtendedPrice, Orders.Freight FROM Shippers INNER JOIN (Products INNER JOIN ( (Employees INNER JOIN (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) ON Employees.EmployeeID = Orders.EmployeeID) INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID) ON Products.ProductID = OrderDetails.ProductID) ON Shippers.ShipperID = Orders.ShipVia ORDER BY Orders.CustomerID, Orders.ShippedDate DESC) -&-#shipname MC(40)0&-#shipaddress MC(60)-&-#shipcity MC(15)/&-#shipregion MC(15)8Customer Description8Customer Type@ custtypeidCustomerDemographicscusttypeid8Customer Type ID8Customer ID5 customeridCustomerscustomerid( customercustomerdemo.dbf8Territory ID8Territory Description8Region ID'employeeterritories.dbfO 66% LuU Ta%CC' CS 9 T- %C' |%C BUFFERINGx C Z#COT BULLRETVALPNERROR Ta%CCS @ T-%C53TCCCtcCascadeParentbC6f>%C BUFFERING C Z#COT BU TCFIELDNAME TCNEWVALUETCCASCADEPARENTLLRETVALPCCASCADEPARENTPNERROR'4 TC+%CgaErrors[lnErrorRows,1]bLCTTTTT T+CCt O,TC,CtTTTT T T  T  T  T  BUTNERRNO TCMESSAGETCCODE TCPROGRAM LNERRORROWSLNXXGAERRORS PCPARENTDBF PNPARENTREC PCPARENTID PCPARENTEXPR PCCHILDDBF PNCHILDREC PCCHILDID PCCHILDEXPRV 4 TTCCf*Cf(TC*0%CC\CC\ ! T% TCWF TCW%C *%Q__riCCCWZAPQ__riCCCWZA% TCf?CCWZ TE!TCCC>\g5TCCf*CZCf?CZ%C G((%A T BU TCTABLETCORDER LCCURWKAREA LCNEWWKAREA LNINUSESPOTLNOCCURS LNOCCURANCE PCRICURSORSPNERROR4 %(@GG %C[{~ON ERROR &pcRIolderror. (C*TC*QCC\g%ONGA %OFF G%ON&G % ONCG2  HT C iG( C G( BaU TLSUCCESSLNXXLNSPOT LCWORKAREA PCRIOLDERROR PCRICURSORS PCOLDCOMPAT PCOLDDELE PCOLDEXACT PCOLDTALKPCOLDDBCJ 45TCCf?CZCf*CZBaU TCTABLENAMETCWKAREA PCRICURSORS Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(T CATEGORYID&TCProducts categoryid%%= -B-TC&TC F TCO TT CATEGORYID% 9T CDelete restrict rule violated.CProducts% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA CATEGORYIDRIOPENRIENDRIERRORRIREUSEo Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTC CATEGORYID_ TT CATEGORYID T%6TCProducts%%=  - FB-TC&G(( categoryidTC TCO TT CATEGORYID% 9T CUpdate restrict rule violated.CProducts% 2%=  F B%=U  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA CATEGORYIDRIOPENRIENDRIERRORRIREUSEd Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJCCf(+TALLTRIM(UPPER(CUSTOMERTYPEID))2TCCustomerCustomerDemo custtypeid%%= -B-TC&TC F TCOTCCf+TALLTRIM(UPPER(CUSTOMERTYPEID))% 9T CDelete restrict rule violated.%CCustomerCustomerDemo% +%=  F B%=J  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREACUSTOMERTYPEIDRIOPENRIENDRIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCO.TCALLTRIM(UPPER(CUSTOMERTYPEID))_ T+TALLTRIM(UPPER(CUSTOMERTYPEID))TCCf%%TCCustomerCustomerDemo%V%=A - FB-TC&G(( custtypeidTC TCOTCCf+TALLTRIM(UPPER(CUSTOMERTYPEID))% %9T CUpdate restrict rule violated.%CCustomerCustomerDemo% %=w  F B%=  F BU LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREACUSTOMERTYPEIDRIOPENRIEND CUSTTYPEIDRIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(T CUSTOMERID$TCOrders customerid%%= -B-TC&TC F TCO TT CUSTOMERID% 9T CDelete restrict rule violated.COrders% %=  F B F TC& TCOJ(T CUSTOMERID2TCCustomerCustomerDemo customerid%%= -B-TC&TC F TCOTCCf'TALLTRIM(UPPER(CUSTOMERID))% Q9T CDelete restrict rule violated.%CCustomerCustomerDemo% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA CUSTOMERIDRIOPENRIENDRIERRORRIREUSEt Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTC CUSTOMERID_ TT CUSTOMERID T%TCOrders%%= - FB-TC& F~ TCO TT CUSTOMERID% !+TC CUSTOMERID CUSTOMERSCOrders% %=  F B F TC& TCOTC CUSTOMERID_ TT CUSTOMERID T%;%TCCustomerCustomerDemo%%= - FB-TC&G(( customeridTC TCOTCCf'TALLTRIM(UPPER(CUSTOMERID))% 9T CUpdate restrict rule violated.%CCustomerCustomerDemo% 7%=   F B%=Z  F BU LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA CUSTOMERIDRIOPENRIENDRIUPDATERIREUSERIERRORb Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(T EMPLOYEEID&TC Employees reportsto%%= -B-TC&TC F TCO TT REPORTSTO% 9T CDelete restrict rule violated.C Employees% %=  F B F TC& TCOJ(T EMPLOYEEID$TCOrders employeeid%%= -B-TC&TC F TCO TT EMPLOYEEID% 39T CDelete restrict rule violated.COrders% %=w  F B F TC& TCOJ(T EMPLOYEEID1TCEmployeeTerritories employeeid%D%=9 -B-TC& F E~+  TCO TT EMPLOYEEIDTC$CEmployeeTerritories% )%=  F B%=H  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA EMPLOYEEIDRIOPENRIEND REPORTSTORIERRORRIREUSERIDELETEi Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTC EMPLOYEEID_ TT EMPLOYEEID T%6TC Employees%%=  - FB-TC&G(( reportstoTC TCO TT REPORTSTO% 9T CUpdate restrict rule violated.C Employees% 2%=  F B F TC& TCOTC EMPLOYEEID_ TT EMPLOYEEID T%&TCOrders%%= - FB-TC&G(( employeeidTC TCO TT EMPLOYEEID% 9T CUpdate restrict rule violated.COrders% "%=   F B F TC& TCOTC EMPLOYEEID_ TT EMPLOYEEID T%0$TCEmployeeTerritories% %= - FB-TC&G(( employeeidTC TCO TT EMPLOYEEID% 9T CUpdate restrict rule violated.$CEmployeeTerritories% ,%=  F B%=O  F BU LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA EMPLOYEEIDRIOPENRIEND REPORTSTORIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(TORDERID'TC OrderDetailsorderid%%= -B-TC& F E~+ W TCO TTORDERIDTCC OrderDetails% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREAORDERIDRIOPENRIENDRIDELETERIREUSEk Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTCORDERID_ TTORDERID T%2TC OrderDetails%%= - FB-TC&G((orderidTC TCO TTORDERID% 9T CUpdate restrict rule violated.C OrderDetails% .%=  F B%=Q  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAORDERIDRIOPENRIENDRIERRORRIREUSE! Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(T PRODUCTID)TC OrderDetails productid%%= -B-TC&TC F TCO TT PRODUCTID% 9T CDelete restrict rule violated.C OrderDetails% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA PRODUCTIDRIOPENRIENDRIERRORRIREUSEs Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTC PRODUCTID_ TT PRODUCTID T%:TC OrderDetails% %=  - FB-TC&G(( productidTC TCO TT PRODUCTID% 9T CUpdate restrict rule violated.C OrderDetails% 6%=  F B%=Y  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA PRODUCTIDRIOPENRIENDRIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(TREGIONID'TC Territoriesregionid%%= -B-TC&TC F TCO TTREGIONID% 9T CDelete restrict rule violated.C Territories% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREAREGIONIDRIOPENRIENDRIERRORRIREUSEm Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTCREGIONID_ TTREGIONID T%4TC Territories%%= - FB-TC&G((regionidTC TCO TTREGIONID% 9T CUpdate restrict rule violated.C Territories% 0%=  F B%=S  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREAREGIONIDRIOPENRIENDRIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(T SHIPPERID#TCOrders shipperid%%= -B-TC&TC F TCO TTSHIPVIA% 9T CDelete restrict rule violated.COrders% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA SHIPPERIDRIOPENRIENDSHIPVIARIERRORRIREUSEe Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTC SHIPPERID_ TT SHIPPERID T%,TCOrders%%= - FB-TC&G(( shipperidTC TCO TTSHIPVIA% 9T CUpdate restrict rule violated.COrders% (%=  F B%=K  F BU LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA SHIPPERIDRIOPENRIENDSHIPVIARIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJ(T SUPPLIERID&TCProducts supplierid%%= -B-TC&TC F TCO TT SUPPLIERID% 9T CDelete restrict rule violated.CProducts% %=  F B%=  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA SUPPLIERIDRIOPENRIENDRIERRORRIREUSEo Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOTC SUPPLIERID_ TT SUPPLIERID T%6TCProducts%%=  - FB-TC&G(( supplieridTC TCO TT SUPPLIERID% 9T CUpdate restrict rule violated.CProducts% 2%=  F B%=U  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA SUPPLIERIDRIOPENRIENDRIERRORRIREUSEH Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCOJCCf((TALLTRIM(UPPER(TERRITORYID))1TCEmployeeTerritories territoryi%%= -B-TC&TC F TCO TT TERRITORYID% 9T CDelete restrict rule violated.$CEmployeeTerritories% %=  F B%=.  F BULLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREA LCSTARTAREA TERRITORYIDRIOPENRIENDRIERRORRIREUSE Ta5 5!J(J(%='5     TCTALKvG2T CDELETEDvTCEXACTvTC COMPATIBLEvGAG G T  T T Cerror T ?17pnerror=rierror(ERROR(),message(),message(1),program())%C gaErrors(1)bU<7  TCG( NORTHWIND TCW Ta TCW F TC& TCO+TCALLTRIM(UPPER(TERRITORYID))_ T(TALLTRIM(UPPER(TERRITORYID))TCCf%s$TCEmployeeTerritories%O%=: - FB-TC&G(( territoryiTC TCO TT TERRITORYID% 9T CUpdate restrict rule violated.$CEmployeeTerritories% o%=X  F B%=  F BU LLRETVAL PCPARENTDBF PNPARENTREC PCCHILDDBF PNCHILDREC PCPARENTID PCCHILDID PCPARENTEXPR PCCHILDEXPR PCRICURSORS PCRIWKAREAS PCRIOLDERRORPNERROR PCOLDDELE PCOLDEXACT PCOLDTALK PCOLDCOMPATPCOLDDBCGAERRORS LCPARENTID LCOLDPARENTID LCCHILDWKAREA LCCHILDID LCOLDCHILDIDLCPARENTWKAREA LCSTARTAREA TERRITORYIDRIOPENRIEND TERRITORYIRIERRORRIREUSEQSTRINGQSTRING#TCCC6oProductsQ OrderDetailsQOrdersQ  CustomersQ CQ       U TCCUSTOMERID LCCUSTOMERID PRODUCTNAMEQUANTITYTOTALPRODUCTSP ORDERDETAILSODORDERSO CUSTOMERSC CUSTOMERIDORDERID PRODUCTIDQINTEGERQINTEGER#TCCN6oProductsQ  OrderDetailsQCTQdQCTQ    U TIORDERID LIORDERID PRODUCTNAMEOD UNITPRICEQUANTITYDISCOUNT EXTENDEDPRICEPRODUCTSP ORDERDETAILS PRODUCTIDORDERID}QSTRINGQSTRING#TCCC65oOrdersU TCCUSTOMERID LCCUSTOMERIDORDERID ORDERDATE REQUIREDDATE SHIPPEDDATEORDERS CUSTOMERIDQDATEQDATE)TCCD mBA6)TCCD 9BA6ioOrdersOrder_Subtotals CiQ CU TDBEGINNING_DATE TDENDING_DATELDBEGINNING_DATE LDENDING_DATEORDERS SHIPPEDDATEORDERIDORDER_SUBTOTALSSUBTOTALYEAR%QDATEQDATEQDATEQDATE)TCCD mBA6)TCCD 9BA6o EmployeesOrdersOrder_Subtotals      Q C UTDBEGINNING_DATE TDENDING_DATELDBEGINNING_DATE LDENDING_DATE EMPLOYEESCOUNTRYLASTNAME FIRSTNAMEORDERS SHIPPEDDATEORDERIDORDER_SUBTOTALSSUBTOTAL SALEAMOUNT EMPLOYEEIDRIDELETE,RIUPDATErierror>riopenriendrireuse __RI_DELETE_CategoriesT __RI_UPDATE_Categories __RI_DELETE_CustomerDemographics __RI_UPDATE_CustomerDemographicsr__RI_DELETE_Customers!__RI_UPDATE_Customers)__RI_DELETE_Employees1__RI_UPDATE_Employees9__RI_DELETE_OrdersC__RI_UPDATE_OrdersI__RI_DELETE_ProductsN__RI_UPDATE_Products\T__RI_DELETE_RegionAZ__RI_UPDATE_Region___RI_DELETE_Shipperse__RI_UPDATE_Shippers k__RI_DELETE_Suppliersp__RI_UPDATE_Suppliersdv__RI_DELETE_TerritoriesF|__RI_UPDATE_Territories CustOrderHistCustOrdersDetailCustOrdersOrders SalesByYearՋEmployeeSalesbyCountry33qAAAA2qA1q1AAA211A1A3rqAAARAAR1AAA3qQaAaAAQA1aAAaA1aA1aAaAq3Rq4qQr1aaAaaaQqA1QAqqqqqqaAqA1qAAAA5rQr1aaAaaaQqA1QAqqqqqqqqAqA1qAAAAA6qQr1aaAaaaQqA1QAqqqqqQ!AqA1AQAAA5rQr1aaAaaaQqA1QAqqqqqqqQAqA1AQAAAA6qQr1aaAaaaQqA1QAqqqqqqAAqA1qAqAAq!AqA1qAQAAA5rQr1aaAaaaQqA1QAqqqqqqqqqAqA!qAAAqAAAqQAqA1qAQAAAA6qQr1aaAaaaQqA1QAqqqqqqaAqA1aAAAqAAqA1qAqAAqAqAqAAAAA5rQr1aaAaaaQqA1QAqqqqqqqqAqA1aAAAAqqAqA1qAqAAAqAAqA1qAAAAAA6qQr1aaAaaaQqA1QAqqqqqAqAqAAAAAA5rQr1aaAaaaQqA1QAqqqqqqqqAAqAq1AAAAAA6qQr1aaAaaaQqA1QAqqqqqaAqA1aAAAA5rQr1aaAaaaQqA1QAqqqqqqqaAqA1aAAAAA6qQr1aaAaaaQqA1QAqqqqqQqAqA1QAAAA5rQr1aaAaaaQqA1QAqqqqqqqQAqA1QAAAAA6qQr1aaAaaaQqA1QAqqqqqa1AqA1AAqAAA5rQr1aaAaaaQqA1QAqqqqqqqaqAqA1AAqAAAA6qQr1aaAaaaQqA1QAqqqqqqaAqA1qAAAA5rQr1aaAaaaQqA1QAqqqqqqqqAqA1qAAAAA6qQr1aaAaaaQqA1QAqqqqqQAqA1AAAAA5rQr1aaAaaaQqA1QAqqqqqqqAAqA1AAAAAA61 5!"1 51X55 3]$)(>=' Ec: q!EQuc$$$.El=.999F \FURUeBewSx< :?.;];[_3Smure#yL*Ii2K7R/<oA]F)6 **__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER** procedure RIDELETE local llRetVal llRetVal=.t. IF (ISRLOCKED() and !deleted()) OR !RLOCK() llRetVal=.F. ELSE IF !deleted() DELETE IF CURSORGETPROP('BUFFERING') > 1 =TABLEUPDATE() ENDIF ENDIF not already deleted ENDIF UNLOCK RECORD (RECNO()) llRetVal=pnerror=0 RETURN llRetVal procedure RIUPDATE lparameters tcFieldName,tcNewValue,tcCascadeParent local llRetVal llRetVal=.t. IF ISRLOCKED() OR !RLOCK() llRetVal=.F. ELSE IF EVAL(tcFieldName)<>tcNewValue PRIVATE pcCascadeParent pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent)) REPLACE (tcFieldName) WITH tcNewValue IF CURSORGETPROP('BUFFERING') > 1 =TABLEUPDATE() ENDIF ENDIF values don't already match ENDIF it's locked already, or I was able to lock it UNLOCK RECORD (RECNO()) llRetVal=pnerror=0 return llRetVal procedure rierror parameters tnErrNo,tcMessage,tcCode,tcProgram local lnErrorRows,lnXX lnErrorRows=alen(gaErrors,1) if type('gaErrors[lnErrorRows,1]')<>"L" dimension gaErrors[lnErrorRows+1,alen(gaErrors,2)] lnErrorRows=lnErrorRows+1 endif gaErrors[lnErrorRows,1]=tnErrNo gaErrors[lnErrorRows,2]=tcMessage gaErrors[lnErrorRows,3]=tcCode gaErrors[lnErrorRows,4]="" lnXX=1 do while !empty(program(lnXX)) gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+; program(lnXX) lnXX=lnXX+1 enddo gaErrors[lnErrorRows,5]=pcParentDBF gaErrors[lnErrorRows,6]=pnParentRec gaErrors[lnErrorRows,7]=pcParentID gaErrors[lnErrorRows,8]=pcParentExpr gaErrors[lnErrorRows,9]=pcChildDBF gaErrors[lnErrorRows,10]=pnChildRec gaErrors[lnErrorRows,11]=pcChildID gaErrors[lnErrorRows,12]=pcChildExpr return tnErrNo PROCEDURE riopen PARAMETERS tcTable,tcOrder LOCAL lcCurWkArea,lcNewWkArea,lnInUseSpot,lnOccurs,lnOccurance lnInUseSpot=0 lnOccurs = OCCURS(UPPER(tcTable)+"*",UPPER(pcRIcursors)) FOR lnOccurance = 1 TO lnOccurs lnInUseSpot=ATC(tcTable+"*",pcRIcursors,lnOccurance) IF ISDIGIT(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) OR; EMPTY(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) EXIT ENDIF lnInUseSpot=0 ENDFOR IF lnInUseSpot=0 lcCurWkArea=select() SELECT 0 lcNewWkArea=select() IF NOT EMPTY(tcOrder) USE (tcTable) AGAIN ORDER (tcOrder) ; ALIAS ("__ri"+LTRIM(STR(SELECT()))) share ELSE USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share ENDIF if pnerror=0 pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5) else lcNewWkArea=0 endif something bad happened while attempting to open the file ELSE lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5)) pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),; upper(tcTable)+"?"+str(lcNewWkArea,5)) IF NOT EMPTY(tcOrder) SET ORDER TO (tcOrder) IN (lcNewWkArea) ENDIF sent an order if pnerror<>0 lcNewWkArea=0 endif something bad happened while setting order ENDIF RETURN (lcNewWkArea) PROCEDURE riend PARAMETERS tlSuccess local lnXX,lnSpot,lcWorkArea IF tlSuccess END TRANSACTION ELSE SET DELETED OFF ROLLBACK SET DELETED ON ENDIF IF EMPTY(pcRIolderror) ON ERROR ELSE ON ERROR &pcRIolderror. ENDIF FOR lnXX=1 TO occurs("*",pcRIcursors) lnSpot=atc("*",pcRIcursors,lnXX)+1 USE IN (VAL(substr(pcRIcursors,lnSpot,5))) ENDFOR IF pcOldCompat = "ON" SET COMPATIBLE ON ENDIF IF pcOldDele="OFF" SET DELETED OFF ENDIF IF pcOldExact="ON" SET EXACT ON ENDIF IF pcOldTalk="ON" SET TALK ON ENDIF do case case empty(pcOldDBC) set data to case pcOldDBC<>DBC() set data to (pcOldDBC) endcase RETURN .T. PROCEDURE rireuse * rireuse.prg PARAMETERS tcTableName,tcWkArea pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),; upper(tcTableName)+"*"+str(tcWkArea,5)) RETURN .t. ******************************************************************************** ** "Referential integrity delete trigger for" Categories PROCEDURE __RI_DELETE_Categories LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE CATEGORYID TO lcParentID,pcParentID pcParentExpr="CATEGORYID" lcChildWkArea=riopen("Products","categoryid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=CATEGORYID pcChildExpr="CATEGORYID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Categories ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Categories ** "Referential integrity update trigger for" Categories LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("CATEGORYID") pcParentID=lcOldParentID pcParentExpr="CATEGORYID" lcParentID=CATEGORYID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Products") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO categoryid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=CATEGORYID pcChildExpr="CATEGORYID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("Products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Categories ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" CustomerDemographics PROCEDURE __RI_DELETE_CustomerDemographics LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE ALLTRIM(UPPER(CUSTOMERTYPEID)) TO lcParentID,pcParentID pcParentExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))" lcChildWkArea=riopen("CustomerCustomerDemo","custtypeid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=ALLTRIM(UPPER(CUSTOMERTYPEID)) pcChildExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("CustomerCustomerDemo",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" CustomerDemographics ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_CustomerDemographics ** "Referential integrity update trigger for" CustomerDemographics LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("ALLTRIM(UPPER(CUSTOMERTYPEID))") pcParentID=lcOldParentID pcParentExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))" lcParentID=ALLTRIM(UPPER(CUSTOMERTYPEID)) IF lcParentID<>lcOldParentID lcChildWkArea=riopen("CustomerCustomerDemo") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO custtypeid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=ALLTRIM(UPPER(CUSTOMERTYPEID)) pcChildExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("CustomerCustomerDemo",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" CustomerDemographics ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Customers PROCEDURE __RI_DELETE_Customers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE CUSTOMERID TO lcParentID,pcParentID pcParentExpr="CUSTOMERID" lcChildWkArea=riopen("Orders","customerid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=CUSTOMERID pcChildExpr="CUSTOMERID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE CUSTOMERID TO lcParentID,pcParentID pcParentExpr="CUSTOMERID" lcChildWkArea=riopen("CustomerCustomerDemo","customerid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=ALLTRIM(UPPER(CUSTOMERID)) pcChildExpr="ALLTRIM(UPPER(CUSTOMERID))" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("CustomerCustomerDemo",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Customers ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Customers ** "Referential integrity update trigger for" Customers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("CUSTOMERID") pcParentID=lcOldParentID pcParentExpr="CUSTOMERID" lcParentID=CUSTOMERID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Orders") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SCAN FOR CUSTOMERID=lcOldParentID pnChildRec=recno() pcChildID=CUSTOMERID pcChildExpr="CUSTOMERID" IF NOT llRetVal EXIT ENDIF && not llretval llRetVal=riupdate("CUSTOMERID",lcParentID,"CUSTOMERS") ENDSCAN get all of the Orders records =rireuse("Orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("CUSTOMERID") pcParentID=lcOldParentID pcParentExpr="CUSTOMERID" lcParentID=CUSTOMERID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("CustomerCustomerDemo") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO customerid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=ALLTRIM(UPPER(CUSTOMERID)) pcChildExpr="ALLTRIM(UPPER(CUSTOMERID))" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("CustomerCustomerDemo",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Customers ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Employees PROCEDURE __RI_DELETE_Employees LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE EMPLOYEEID TO lcParentID,pcParentID pcParentExpr="EMPLOYEEID" lcChildWkArea=riopen("Employees","reportsto") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=REPORTSTO pcChildExpr="REPORTSTO" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Employees",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE EMPLOYEEID TO lcParentID,pcParentID pcParentExpr="EMPLOYEEID" lcChildWkArea=riopen("Orders","employeeid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=EMPLOYEEID pcChildExpr="EMPLOYEEID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE EMPLOYEEID TO lcParentID,pcParentID pcParentExpr="EMPLOYEEID" lcChildWkArea=riopen("EmployeeTerritories","employeeid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SEEK lcParentID SCAN WHILE EMPLOYEEID=lcParentID AND llRetVal pnChildRec=recno() pcChildID=EMPLOYEEID pcChildExpr="EMPLOYEEID" llRetVal=ridelete() ENDSCAN get all of the EmployeeTerritories records =rireuse("EmployeeTerritories",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Employees ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Employees ** "Referential integrity update trigger for" Employees LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("EMPLOYEEID") pcParentID=lcOldParentID pcParentExpr="EMPLOYEEID" lcParentID=EMPLOYEEID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Employees") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO reportsto IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=REPORTSTO pcChildExpr="REPORTSTO" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("Employees",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("EMPLOYEEID") pcParentID=lcOldParentID pcParentExpr="EMPLOYEEID" lcParentID=EMPLOYEEID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Orders") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO employeeid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=EMPLOYEEID pcChildExpr="EMPLOYEEID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("Orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("EMPLOYEEID") pcParentID=lcOldParentID pcParentExpr="EMPLOYEEID" lcParentID=EMPLOYEEID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("EmployeeTerritories") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO employeeid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=EMPLOYEEID pcChildExpr="EMPLOYEEID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("EmployeeTerritories",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Employees ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Orders PROCEDURE __RI_DELETE_Orders LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE ORDERID TO lcParentID,pcParentID pcParentExpr="ORDERID" lcChildWkArea=riopen("OrderDetails","orderid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SELECT (lcChildWkArea) SEEK lcParentID SCAN WHILE ORDERID=lcParentID AND llRetVal pnChildRec=recno() pcChildID=ORDERID pcChildExpr="ORDERID" llRetVal=ridelete() ENDSCAN get all of the OrderDetails records =rireuse("OrderDetails",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Orders ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Orders ** "Referential integrity update trigger for" Orders LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("ORDERID") pcParentID=lcOldParentID pcParentExpr="ORDERID" lcParentID=ORDERID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("OrderDetails") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO orderid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=ORDERID pcChildExpr="ORDERID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("OrderDetails",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Orders ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Products PROCEDURE __RI_DELETE_Products LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE PRODUCTID TO lcParentID,pcParentID pcParentExpr="PRODUCTID" lcChildWkArea=riopen("OrderDetails","productid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=PRODUCTID pcChildExpr="PRODUCTID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("OrderDetails",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Products ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Products ** "Referential integrity update trigger for" Products LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("PRODUCTID") pcParentID=lcOldParentID pcParentExpr="PRODUCTID" lcParentID=PRODUCTID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("OrderDetails") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO productid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=PRODUCTID pcChildExpr="PRODUCTID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("OrderDetails",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Products ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Region PROCEDURE __RI_DELETE_Region LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE REGIONID TO lcParentID,pcParentID pcParentExpr="REGIONID" lcChildWkArea=riopen("Territories","regionid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=REGIONID pcChildExpr="REGIONID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Territories",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Region ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Region ** "Referential integrity update trigger for" Region LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("REGIONID") pcParentID=lcOldParentID pcParentExpr="REGIONID" lcParentID=REGIONID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Territories") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO regionid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=REGIONID pcChildExpr="REGIONID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("Territories",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Region ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Shippers PROCEDURE __RI_DELETE_Shippers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE SHIPPERID TO lcParentID,pcParentID pcParentExpr="SHIPPERID" lcChildWkArea=riopen("Orders","shipperid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=SHIPVIA pcChildExpr="SHIPVIA" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Shippers ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Shippers ** "Referential integrity update trigger for" Shippers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("SHIPPERID") pcParentID=lcOldParentID pcParentExpr="SHIPPERID" lcParentID=SHIPPERID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Orders") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO shipperid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=SHIPVIA pcChildExpr="SHIPVIA" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("Orders",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Shippers ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Suppliers PROCEDURE __RI_DELETE_Suppliers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE SUPPLIERID TO lcParentID,pcParentID pcParentExpr="SUPPLIERID" lcChildWkArea=riopen("Products","supplierid") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=SUPPLIERID pcChildExpr="SUPPLIERID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("Products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Suppliers ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Suppliers ** "Referential integrity update trigger for" Suppliers LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("SUPPLIERID") pcParentID=lcOldParentID pcParentExpr="SUPPLIERID" lcParentID=SUPPLIERID IF lcParentID<>lcOldParentID lcChildWkArea=riopen("Products") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO supplierid IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=SUPPLIERID pcChildExpr="SUPPLIERID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("Products",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Suppliers ******************************************************************************** ******************************************************************************** ** "Referential integrity delete trigger for" Territories PROCEDURE __RI_DELETE_Territories LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcParentWkArea LOCAL llDelHeaderarea LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() STORE ALLTRIM(UPPER(TERRITORYID)) TO lcParentID,pcParentID pcParentExpr="ALLTRIM(UPPER(TERRITORYID))" lcChildWkArea=riopen("EmployeeTerritories","territoryi") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) llRetVal=!SEEK(lcParentID,lcChildWkArea) SELECT (lcChildWkArea) pnChildRec=recno() pcChildID=TERRITORYID pcChildExpr="TERRITORYID" IF !llRetVal pnError = rierror(-1,"Delete restrict rule violated.","","") ENDIF =rireuse("EmployeeTerritories",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Delete trigger for" Territories ******************************************************************************** ******************************************************************************** procedure __RI_UPDATE_Territories ** "Referential integrity update trigger for" Territories LOCAL llRetVal llRetVal = .t. PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID PRIVATE pcParentExpr,pcChildExpr STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr STORE 0 TO pnParentRec,pnChildRec IF _triggerlevel=1 BEGIN TRANSACTION PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,; pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC pcOldTalk=SET("TALK") SET TALK OFF pcOldDele=SET("DELETED") pcOldExact=SET("EXACT") pcOldCompat=SET("COMPATIBLE") SET COMPATIBLE OFF SET DELETED ON SET EXACT OFF pcRIcursors="" pcRIwkareas="" pcRIolderror=ON("error") pnerror=0 ON ERROR pnerror=rierror(ERROR(),message(),message(1),program()) IF TYPE('gaErrors(1)')<>"U" release gaErrors ENDIF PUBLIC gaErrors(1,12) pcOldDBC=DBC() SET DATA TO ("NORTHWIND") ENDIF first trigger LOCAL lcParentID && parent's value to be sought in child LOCAL lcOldParentID && previous parent id value LOCAL lcChildWkArea && child work area handle returned by riopen LOCAL lcChildID && child's value to be sought in parent LOCAL lcOldChildID && old child id value LOCAL lcParentWkArea && parentwork area handle returned by riopen LOCAL lcStartArea lcStartArea=select() llRetVal=.t. lcParentWkArea=select() SELECT (lcParentWkArea) pcParentDBF=dbf() pnParentRec=recno() lcOldParentID=OLDVAL("ALLTRIM(UPPER(TERRITORYID))") pcParentID=lcOldParentID pcParentExpr="ALLTRIM(UPPER(TERRITORYID))" lcParentID=ALLTRIM(UPPER(TERRITORYID)) IF lcParentID<>lcOldParentID lcChildWkArea=riopen("EmployeeTerritories") IF lcChildWkArea<=0 IF _triggerlevel=1 DO riend WITH .F. ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN .F. ENDIF not able to open the child work area pcChildDBF=dbf(lcChildWkArea) SET ORDER TO territoryi IN (lcChildWkArea) llRetVal=!SEEK(lcOldParentID,lcChildWkArea) pnChildRec=recno() pcChildID=TERRITORYID pcChildExpr="TERRITORYID" IF !llRetVal pnError = rierror(-1,"Update restrict rule violated.","","") ENDIF =rireuse("EmployeeTerritories",lcChildWkArea) IF NOT llRetVal IF _triggerlevel=1 DO riend WITH llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ENDIF ENDIF this parent id changed IF _triggerlevel=1 do riend with llRetVal ENDIF at the end of the highest trigger level SELECT (lcStartArea) RETURN llRetVal ** "End of Referential integrity Update trigger for" Territories ******************************************************************************** **__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER** *------------------------------------------------ PROCEDURE CustOrderHist(tcCustomerID as String ) *------------------------------------------------ LOCAL lcCustomerID as String lcCustomerID = IIF(VARTYPE(tcCustomerID)!="C","",tcCustomerID) SELECT ProductName, SUM(Quantity) AS Total ; FROM Products P, OrderDetails OD, Orders O, Customers C ; WHERE C.CustomerID = lcCustomerID ; AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID ; GROUP BY ProductName ENDPROC *------------------------------------------------ PROCEDURE CustOrdersDetail(tiOrderID as Integer ) *------------------------------------------------ LOCAL liOrderID as Integer liOrderID = IIF(VARTYPE(tiOrderID)!="N",0,tiOrderID) SELECT ProductName, ; ROUND(Od.UnitPrice, 2) AS UnitPrice,; Quantity, ; (Discount*100) AS Discount, ; ROUND(Quantity * (1 - Discount) * Od.UnitPrice, 2) AS ExtendedPrice; FROM Products P, OrderDetails Od; WHERE Od.ProductID = P.ProductID and Od.OrderID = liOrderID ENDPROC *------------------------------------------------ PROCEDURE CustOrdersOrders(tcCustomerID as String) *------------------------------------------------ LOCAL lcCustomerID as String lcCustomerID = IIF(VARTYPE(tcCustomerID)!="C","",tcCustomerID) SELECT OrderID, ; OrderDate,; RequiredDate,; ShippedDate; FROM Orders; WHERE CustomerID = lcCustomerID; ORDER BY OrderID ENDPROC *--------------------------------------------------------------------------------- PROCEDURE SalesByYear(tdBeginning_Date as Date, tdEnding_Date as Date) *--------------------------------------------------------------------------------- ldBeginning_Date= IIF(VARTYPE(tdBeginning_Date)!="D",{^1901/01/01},tdBeginning_Date) ldEnding_Date = IIF(VARTYPE(tdEnding_Date)!="D",{^2101/01/01},tdEnding_Date) SELECT Orders.ShippedDate, Orders.OrderID, Order_Subtotals.Subtotal, YEAR(ShippedDate) AS Year ; FROM Orders ; INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID ; WHERE BETWEEN(Orders.ShippedDate, ldBeginning_Date, ldEnding_Date) ENDPROC *--------------------------------------------------------------------------------- PROCEDURE EmployeeSalesbyCountry(tdBeginning_Date as Date, tdEnding_Date as Date) *--------------------------------------------------------------------------------- LOCAL ldBeginning_Date as Date, ldEnding_Date as Date ldBeginning_Date= IIF(VARTYPE(tdBeginning_Date)!="D",{^1901/01/01},tdBeginning_Date) ldEnding_Date = IIF(VARTYPE(tdEnding_Date)!="D",{^2101/01/01},tdEnding_Date) SELECT Employees.Country, Employees.LastName, ; Employees.FirstName, Orders.ShippedDate, ; Orders.OrderID, Order_Subtotals.Subtotal AS SaleAmount ; FROM Employees INNER JOIN ; (Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID) ; ON Employees.EmployeeID = Orders.EmployeeID ; WHERE BETWEEN(Orders.ShippedDate, ldBeginning_Date, ldEnding_Date) ENDPROC